StringScanner.SkipToStringI Function
Syntax
Arguments
- Result_Flag
True if the string was found.
- characters
The character string to search for. Case insensitive.
Description
Skip until text matching string (case insensitive) is found. Return true if successful.
Discussion
The <StringScanner>.SkipToStringI() function moves the offset to the beginning of of Find_Text. The offset does not move if it is already pointing to Find_Text.
Example
dim scanner as P dim txt as C txt = <<%text% This is wonderful prose written by a technical writer of note. %text% scanner = stringscanner.create(txt) ? scanner.SkipToStringI("writer") = .T. ? scanner.GetToOffset() = This is wonderful prose written by a technical ? scanner.getremainder() = writer of note.
The following example uses <StringScanner>.SkipToString()to count instances of a string in a text file. <StringScanner>.SkipToString()positions the offset pointer at the beginning of the text that it finds. Note how sc.ScanOver(1) moves the offset pointer just enough so that the next search will find a different instance of the search text.
dim sc as P dim fbuffer as C dim fname as C dim count as N = 0 dim flag as L = .F. fname = ui_get_file("Get File","c:\*.hhc") fbuffer = file.to_string(fname) sc = stringscanner.create(fbuffer) flag = sc.SkipToString("FIND_ME") while flag = .T. if (flag = .T.) then count = count + 1 end if sc.ScanOver(1) flag = sc.SkipToString("FIND_ME") end while ui_msg_box("Count", "FIND_ME = " + count)
A comparison with OCCURSI() showed that a WHILE...END WHILE loop using <StringScanner>.SkipToString()(similar to the above script) was approximately 60 times faster.
See Also